package com.education.handler;

import com.education.exception.OnlineEducationException;
import com.education.result.R;
import com.education.result.ResultCodeEnum;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 统一异常处理
 * Created by Lance on 2020/06/19 19:02
 */
@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {
    /**
     * 异常处理方法
     * @param e
     * @return
     */
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public R error(Exception e){
        // 使用日志跟踪栈,设置打印日志信息到指定的文件中
        log.error(ExceptionUtils.getStackTrace(e));
        return R.error();
    }

    /**
     * 自定义异常的类型处理
     * @return
     */
    @ExceptionHandler(NullPointerException.class)
    @ResponseBody
    public R error(NullPointerException e){
        // 使用日志跟踪栈,设置打印日志信息到指定的文件中
        log.error(ExceptionUtils.getStackTrace(e));
        return R.setResult(ResultCodeEnum.NULL_POINTER_ERROR);
    }/**
     * 自定义统一的异常处理
     * @return
     */
    @ExceptionHandler(OnlineEducationException.class)
    @ResponseBody
    public R error(OnlineEducationException e){
        // 使用日志跟踪栈,设置打印日志信息到指定的文件中
        log.error(ExceptionUtils.getStackTrace(e));
        // 抛出扫描异常就处理什么
        return R.error().message(e.getMessage()).code(e.getCode());
    }
}
